import java.io.*;
import java.util.ArrayList;
import java.util.List;

public class Response { // 这里编写响应类

    // 响应的状态码， 200成功  3重定向   404 表示没有找到对应的路径文件 50 表示服务器端错误了
    private int status;
    private String data;

    // 客户端解析服务端返回的响应数据
    public static Response clientParse(InputStream is) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
        Response response = new Response();
        // 这里是因为早就约定好了格式，所以敢直接读取第一行，然后将其转为Integer类型
        response.status = Integer.parseInt(br.readLine());
        // 使用list 保存字符
        List<Character> list = new ArrayList<>();
        // 数据：循环读取
        while(true){
            // 一个 字符一个字符的读
            char c = (char) br.read();
            // 一直读取到结束符 \3
            if(c == '\3'){
                break;
            }
            list.add(c);    // 这里不用String 是为了避免产生太多的字符常量， 提高性能
        }
        // 拼接数据
        StringBuilder sb = new StringBuilder();
        for(char c:list){
            sb.append(c);
        }
        response.data = sb.toString();   // 注意这里StringBuilder调用的 toString和 response 重载的toString不同
        return response;
    }

    // 这里函数 将数据写回发送给 客户端
    public void serverWrite(OutputStream os) throws IOException{
        PrintWriter pw = new PrintWriter(new OutputStreamWriter(os, "UTF-8"));
        pw.println(status);
        pw.write(data+"\3");
        // 解决缓冲区的问题
        pw.flush();
    }

    public String toString(){
        return "Response{"+
                "status="+status+
                ", data ='"+data +'\''+
                '}';
    }

    public int getStatus(){
        return status;
    }
    public void setStatus(int status){this.status = status;}
    public String getData(){return data;}
    public void setData(String data){
        this.data = data;
    }




}
